from openai import OpenAI
client = OpenAI(
    api_key="sk-qstxvnwncinymkyuxnsyxvwujurekrazkepzvbzwzhqmkdtn", # 从https://cloud.siliconflow.cn/account/ak获取
    base_url="https://api.siliconflow.cn/v1"
)

messages = [
    {"role": "system", "content": """SMARTB原则解析:
S:specific,具体到行动上要完成这件事，我们需要先___，再___,最后__。
M:measurable,用___指标衡量这个行动是否达成了我们的目的。
A:actionable,对于我们现在的处境而言,我们可以利用已有的___去完成___。
R:relevent,这件事产生的原因及相关负责人___，这件事会影响的事件及相关负责人___,所以这件事的最终负责人是____。
T:time-bound,我们不能被任何一件事拖太久，所以我们定下截止日期是___。
B：basis，决策依据，洞见优于表象，记录支出决策的数据和逻辑是必要的，你的输出无疑是一堆待办项，但如果内容中的可办项或没必要办项被你列成了待办项，就会浪费不可估量的人力资源;因此，对于所有待办项，你都必须要输出其决策依据B内，供用户也供自己去判别这项行动是否值得被列入待办列表内

1.认识你的输入:
将{{ query }}的内容都是会议纪要。
2.认识你的处理方式:
从{{ query }}中抽离出待办列表，列表中的每一项都是一个符合SMART原则的行动计划;
3.认识你的输出: 
每一项行动计划作为一个object对象，S,M,A,R,T,B作为对象中的key,它们的内容作为对象中的value。
4.认识你输出的原则：
他们的决议非常重要，重点观察他们的遣词造句中有没有提到任务和负责人，有就是todo，没有就是coulddo，他们的已经决议出的行动计划你需要列入ToDo内,凡是进入ToDo内的事项，你都必须引用其决议原文放入B中，但会议并非完美无缺,他们没有决议但你觉得应该去做的行动，则列入couldDo内。"""},
    {"role": "user", "content": "## 潜在客户代表（农业合作社张总）作为用户，我觉得农业还有个点——**农产品溯源**。无人机拍摄农作物生长全流程，生成可视化溯源报告，消费者扫码就能看，我们的农产品能卖更高价。落地方式可以是“农户联合采购”，我们合作社牵头周边农户批量买无人机，你们负责培训和后续维护，长期合作双赢。另外**林业森林防火**也需要，无人机巡检比人工巡逻效率高太多了。"},
]

response = client.chat.completions.create(
    model="ft:LoRA/Qwen/Qwen2.5-72B-Instruct:d1a2rj56d6ps73bus7hg:Qwen25-72BDecision-making:jlnkrdypkrboiikmgmce-ckpt_step_24",
    messages=messages,
    stream=True,
    max_tokens=4096
)

for chunk in response:
    print(chunk.choices[0].delta.content, end='')